//控制层
app.controller('goodsController', function ($scope, $controller,$location, goodsService,uploadService,itemCatService,typeTemplateService) {

    $controller('baseController', {$scope: $scope});//继承

    //读取列表数据绑定到表单中  
    $scope.findAll = function () {
        goodsService.findAll().success(
            function (response) {
                $scope.list = response;
            }
        );
    }

    //分页
    $scope.findPage = function (page, rows) {
        goodsService.findPage(page, rows).success(
            function (response) {
                $scope.list = response.rows;
                $scope.paginationConf.totalItems = response.total;//更新总记录数
            }
        );
    }

    //查询实体
    $scope.findOne = function () {
        var id = $location.search()['id'];
        if(id==null){
            return;
        }
        goodsService.findOne(id).success(
            function (response) {
                $scope.entity = response;
                //商品介绍
                editor.html($scope.entity.goodsDesc.introduction);
                //商品图片
                $scope.entity.goodsDesc.itemImages=JSON.parse($scope.entity.goodsDesc.itemImages);
                //扩展属性
                $scope.entity.goodsDesc.customAttributeItems=JSON.parse($scope.entity.goodsDesc.customAttributeItems);
                //规格
                $scope.entity.goodsDesc.specificationItems=JSON.parse($scope.entity.goodsDesc.specificationItems);
                //item表的spec转化,数据库有四行,遍历依次转换
                for(var i = 0;i<$scope.entity.itemList.length;i++){

                    $scope.entity.itemList[i].spec=JSON.parse($scope.entity.itemList[i].spec);


                }
            }
        );
    }

    //保存
    $scope.save = function () {
        $scope.entity.goodsDesc.introduction = editor.html();
        var serviceObject;//服务层对象
        if ($scope.entity.goods.id != null) {//如果有ID
            serviceObject = goodsService.update($scope.entity); //修改
        } else {
            serviceObject = goodsService.add($scope.entity);//增加
        }
        serviceObject.success(
            function (response) {
                if (response.success) {
                    //重新查询
                    alert("保存成功");
                    //清空富文本编辑器
                    location.href="goods.html";
                    /*editor.html("");
                    $scope.entity={};//重新加载*/
                } else {
                    alert(response.message);
                }
            }
        );
    }




    //批量删除
    $scope.dele = function () {
        //获取选中的复选框
        goodsService.dele($scope.selectIds).success(
            function (response) {
                if (response.success) {
                    $scope.reloadList();//刷新列表
                    $scope.selectIds = [];
                }
            }
        );
    }

    $scope.searchEntity = {};//定义搜索对象

    //搜索
    $scope.search = function (page, rows) {
        goodsService.search(page, rows, $scope.searchEntity).success(
            function (response) {
                $scope.list = response.rows;
                $scope.paginationConf.totalItems = response.total;//更新总记录数
            }
        );
    }

    //上传图片;
    $scope.uploadFile=function () {
        uploadService.uploadFile().success(
            function (data) {
                if(data.success){
                    ($scope.image_entity).url=data.message;
                }else {
                    alert(data.message);
                }
            }
        );

    }



    //新加图片
    $scope.entity={goods:{},goodsDesc:{itemImages:[],specificationItems:[]}};

    $scope.add_image_entity=function () {
        $scope.entity.goodsDesc.itemImages.push($scope.image_entity);
    }

    //delete
    $scope.remove_image_entity=function (index) {
        $scope.entity.goodsDesc.itemImages.splice(index,1);
    }

    //查询1级商品分类列表
    $scope.selectItemCat1List=function () {
        itemCatService.findByParentId(0).success(
            function (data) {
                $scope.itemCat1List=data;
            }
        );
    }

    //查询2级商品分类列表
    $scope.$watch('entity.goods.category1Id',function (newValue,oldValue) {
        itemCatService.findByParentId(newValue).success(
            function (data) {
                $scope.itemCat2List=data;
            }
        );

    });
    //查询3级商品分类列表
    $scope.$watch('entity.goods.category2Id',function (newValue,oldValue) {
        itemCatService.findByParentId(newValue).success(
            function (data) {
                $scope.itemCat3List=data;
            }
        );

    });


    //查询模板id
    $scope.$watch('entity.goods.category3Id',function (newValue,oldValue) {
        itemCatService.findOne(newValue).success(
            function (response) {
                $scope.entity.goods.typeTemplateId=response.typeId;
            }
        );

    });

    //品牌列表
    $scope.$watch('entity.goods.typeTemplateId',function (newValue,oldValue) {
        typeTemplateService.findOne(newValue).success(
            function (response) {
                //data代表根据模板id查出来的模板列表
                $scope.typeTemplate=response;
                //品牌列表类型转换
                $scope.typeTemplate.brandIds=JSON.parse($scope.typeTemplate.brandIds);

                //扩展属性
                if($location.search()['id']==null){
                    //是增加商品
                    $scope.entity.goodsDesc.customAttributeItems = JSON.parse($scope.typeTemplate.customAttributeItems);

                }
            }
        );


        //读取规格
        typeTemplateService.findSpecList(newValue).success(
            function (response) {
                $scope.specList=response;
            }
        );
    });

    //勾选数据获取处理
     //$scope.entity={ goodsDesc:{itemImages:[],specificationItems:[]}  };
    //参数1：$event，包含有html标签的事件执行操作，点击操作，勾选操作，取消勾选操作
    //参数2：规格的名称
    //参数3：选项的值
    $scope.updateSpecAttribute=function($event,name,value){

        //调用判断数据是否存在的方法
        //判断数据是否存在，存在追加数据，如果不存在添加数据
        var object= $scope.searchObjectByKey($scope.entity.goodsDesc.specificationItems ,'attributeName', name);
        //判断数据是否存在
        if(object!=null){

            //数据存在
            //判断是否勾选，勾选添加数据
            //$event.target:获取操作的标签
            if($event.target.checked ){
                //[{"attributeName":"网络制式","attributeValue":["移动4G"]}]  -> [{"attributeName":"网络制式","attributeValue":["移动4G","移动3G"]}]
                object.attributeValue.push(value);
            }else{
                // [{"attributeName":"网络制式","attributeValue":["移动4G","移动3G"]}] -> [{"attributeName":"网络制式","attributeValue":["移动4G"]}]
                //取消勾选，去除数据
                //splice ： 删除数据  参数1：删除数据的位置，参数2：删除数据的个数
                //indexOf ：返回数据首次出现的位置
                object.attributeValue.splice( object.attributeValue.indexOf(value ) ,1);//移除选项
                //如果选项都取消了，将此条记录移除
                //[  {"attributeName":"网络制式","attributeValue":[]}  ] -> []
                if(object.attributeValue.length==0){
                    $scope.entity.goodsDesc.specificationItems.splice(
                        $scope.entity.goodsDesc.specificationItems.indexOf(object),1);
                }

            }
        }else{
            //数据不存在，往集合中添加数据
            //[]  -> [{"attributeName":"网络制式","attributeValue":["移动4G"]}]
            $scope.entity.goodsDesc.specificationItems.push({"attributeName":name,"attributeValue":[value]});
        }
    }

    //创建SKU列表
    $scope.createItemList=function(){

        //sku的列表信息是通过规格去产生的
        //tbItem:{spec:{},price:0,num:99999,status:'0',isDefault:'0'}
        //在组合实体类中设置itemlist属性保存tbitem的数据
        //初始化SKU列表集合
        $scope.entity.itemList=[   {spec:{},price:0,num:99999,status:'0',isDefault:'0'}   ];//列表初始化
        //然后进行层层深克隆
        //获取到规格信息集合
        var items= $scope.entity.goodsDesc.specificationItems;

        //遍历规格信息，开始生成新的SKU列表
        for(var i=0;i<items.length;i++){
            //生成新的sku列表
            $scope.entity.itemList= addColumn( $scope.entity.itemList, items[i].attributeName,items[i].attributeValue );
        }
    }

    //添加列，参数1：集合，参数2：规格的名称，参数3：规格的值
    addColumn=function(list,columnName,columnValues){
        var newList=[];
        for(var i=0;i< list.length;i++){
            var oldRow=  list[i];//获取itemList集合 的数据，以便进行深度克隆
            for(var j=0;j<columnValues.length;j++){
                var newRow=  JSON.parse( JSON.stringify(oldRow)  );//深克隆   //JSON.stringify将对象转化成字符串，JSON.parse再将字符串转化成对象
                newRow.spec[columnName]=columnValues[j];//设置新的列表中的规格数据
                newList.push(newRow);//设置新的列表中的价格、库存等数据
            }
        }
        return newList;//返回最新的规格列表，可以作为下一次生成的初始集合
    }

    //				 0		1		2		3
    $scope.status=['未审核','已审核','审核未通过','已关闭'];

    $scope.itemCatList=[];//商品分类列表
    //查询商品分类列表
    $scope.findItemCatList=function(){
        itemCatService.findAll().success(
            function(response){
                for(var i=0;i<response.length;i++){
                    //itemCatList中元素的下标为id，因为商品列表是以商品的id来排序的，一级分类也是包含在商品信息中的，所以itemList的元素和商品信息保持一致
                    $scope.itemCatList[response[i].id]=response[i].name; //$scope.itemCatList[865]=手机
                }
            }
        );
    }

    //判断规格与规格选项是否应该被勾选
    //参数1：网络制式  屏幕尺寸
    //参数2：移动4G
    //goodsDesc.specificationI
    // items
    //[{"attributeName":"网络制式","attributeValue":["移动3G","移动4G"]},
    // {"attributeName":"屏幕尺寸","attributeValue":["6寸","5寸"]}]
    $scope.checkAttributeValue=function(specName,optionName){
        //[  {"attributeName":"网络制式","attributeValue":["移动4G"]},{"attributeName":"屏幕尺寸","attributeValue":["5.5寸","4.5寸"]}  ]
        var items= $scope.entity.goodsDesc.specificationItems;

        //items：[{"attributeName":"网络制式","attributeValue":["移动4G"]},{"attributeName":"屏幕尺寸","attributeValue":["5.5寸","4.5寸"]}]
        //specName ： 网络制式
        var object =$scope.searchObjectByKey( items,'attributeName', specName);

        //object : {"attributeName":"网络制式","attributeValue":["移动4G","移动3G"]}
        //optionName ： 移动4G
        if(object!=null){
            if(object.attributeValue.indexOf(optionName)>=0){//如果能够查询到规格选项  indexOf:获取值在数组中位置，大于等于0表示数组中有值
                return true;
            }else{
                return false;
            }
        }else{
            //代表查不到
            return false;
        }
    }
});	
